package com.atguigu.tingshu.common.caChe;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author: fenghao
 * @date: 2025/9/10 17:27
 * @description:
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface TsCache {

    // 定义一个属性：key的前缀
    String keyPrefix() default "cache:";

    // 定义一个属性：key的后缀
    String keySuffix() default ":info";

    /*
    注解还可以再优化
    如：不想加分布式锁，就想加缓存，不加锁能行吗？
    也就是：缓存有就返回，没有就不让去数据库查，
    也即会有两套业务，通过if对此注解中userLock是否为false进行判断，
    如果为false就是不适用锁，缓存有就返回，没有就返回没有此数据，不再去数据库查，
    ，这套业务没有缓存击穿和穿透的风险，这个其中一个业务，
    另一个业务是，如果userLock为true，即使用分布式锁，缓存有就返回，
    没有再去数据库查，使用锁防止缓存击穿，后面也要预防缓存穿透，这套业务和现在这套代码一致。
     */
    // 定义一个标识（实现，选择性使用分布式锁或直接去缓存中查，有就返回没有拉到，两套业务情况）
    boolean userLock() default false;
}
